#include <iostream>
#define Maxsize 100
class sequenceList
{
private:
    float* myList;
    int curNumberOfItem;//数量
    int maxCapcity;//储存空间
    
public:
    sequenceList(const int &a, const int &b, float c[]);
    ~sequenceList();

    bool addItem(const float& item);
    bool insertItem(const int &pos,const float &item);
    int deleteItem(const float&item);
    bool locate(const int&pos, float&item);
    int locate(const float&item);
    void reverse();
    void print();
};

class linkList;
class listNode{
    friend class linkList;
    friend void merge(linkList&a, linkList&b);
    //friend struct node;
private:
    float data;
    listNode* next;
public:
    listNode(){next = NULL;}
    listNode(float nodeData, listNode* succ = NULL);
    ~listNode();
};

class linkList
{
    friend void merge(linkList&a, linkList&b);
    //friend struct node;
private:
    listNode* firstNode;
    listNode* curNode;
    listNode* lastNode;
	//node* firstNode;
    int listSize;
public:
    linkList();
    linkList(const int& size, float arr[]);
    ~linkList();

    bool headInsertItem(const float& item);          //按值头插
    bool tailInsertItem(const float& item);          //按值尾插
    int insertItem(const int& position,const float& item);    //插入特定位置
    int deleteItem(const float& item);               //按值删除
    bool locate(const int& position, float& item);            //按位查找
    int locate(const float& item);                   //按值查找
    void ascendingOrder();                      //升序
    void reverse();                             //倒排
    void print();
	void merge(linkList& b);                               //打印元素
};

void merge(linkList&a, linkList&b);